//
//  NSString+YHDES.m
//  UI24_加密
//
//  Created by dllo on 16/8/16.
//  Copyright © 2016年 yh. All rights reserved.
//

#import "NSString+YHDES.h"
#import "NSString+YHBase64.h"
#import <CommonCrypto/CommonCrypto.h>
// 声明一个秘钥 (只能8位)
#define key @"01234567"
// 定义一个数组 向量 8位
static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8};

@implementation NSString (YHDES)

- (NSString *)stringWithDES {
    // 声明一个秘钥 将oc字符串转化为C语言字符串
    const char *str = [self UTF8String];
    // 接收容器
    unsigned char  byte[1024];
    // 容器大小
    size_t dataOutMoved = 0;
    // DES加密过程
    // 参数1: 加密/解密
    // 参数2: 加密/解密方式
    // 参数3: 分组密码的选择
    // 参数4: 秘钥
    // 参数5: 秘钥的大小
    // 参数6; 向量
    // 参数7: C语言字符串
    // 参数8: 字符串长度
    // 参数9: 接收容器
    // 参数10: 容器大小
    // 参数11: 容器个数
    CCCryptorStatus CryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, str, strlen(str), byte, 1024, &dataOutMoved);
    // 判断是否成功
    if (CryptorStatus == kCCSuccess) {
        NSLog(@"成功");
        // 转为base64
        NSData *data = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *str = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return str;
    } else {
        return nil;
    }
}

- (NSString *)DESWithString {
     // 将besa64转为data
    NSData *data = [self base64StringWithData];
//    [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
    const void *byte = data.bytes;
    unsigned char  byte1[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus CryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, data.length, byte1, 1024, &dataOutMoved);
    if (CryptorStatus == kCCSuccess) {
        NSLog(@"解密成功");
        NSData *sourceData = [[NSData alloc] initWithBytes:byte1 length:dataOutMoved];
        NSString *str = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        return str;
    } else {
        return nil;
    }
}
@end
